package com.jintian.smart.platform.system.mapper;

import com.jintian.smart.kernel.orm.mapper.IBaseExtMapper;
import com.jintian.smart.base.api.system.entity.RoleEmployeeEntity;
import com.jintian.smart.base.api.system.form.RoleEmployeeQueryForm;
import com.jintian.smart.base.api.system.view.EmployeeVO;
import com.jintian.smart.base.api.system.view.RoleEmployeeVO;
import com.jintian.smart.base.api.system.view.RoleVO;
import org.beetl.sql.core.page.PageResult;
import org.beetl.sql.mapper.annotation.Mapper;
import org.beetl.sql.mapper.annotation.Param;
import org.beetl.sql.mapper.annotation.SqlResource;

import java.util.List;
import java.util.Set;


/**
 * 角色 员工 dao
 */
@Mapper
@SqlResource("system.RoleEmployee")
public interface RoleEmployeeMapper extends IBaseExtMapper<RoleEmployeeEntity> {
    /**
     * 根据员工id查询所有的角色
     */
    List<RoleVO> selectRoleByEmployeeId(@Param("employeeId") Long employeeId);

    /**
     * 根据员工id查询所有的角色io集合
     */
    List<Long> selectRoleIdByEmployeeId(@Param("employeeId") Long employeeId);

    /**
     * 根据员工id查询所有的角色
     */
    List<RoleEmployeeEntity> selectRoleIdByEmployeeIdList(@Param("employeeIdList") List<Long> employeeIdList);

    /**
     * 根据员工id查询所有的角色
     */
    List<RoleEmployeeVO> selectRoleByEmployeeIdList(@Param("employeeIdList") List<Long> employeeIdList);

    /**
     * 查询角色下的人员id
     */
    Set<Long> selectEmployeeIdByRoleIdList(@Param("roleIdList") List<Long> roleIdList);

    /**
     * 分页查询角色下的人员
     */
    PageResult<EmployeeVO> selectRoleEmployeeByName(@Param("queryForm") RoleEmployeeQueryForm roleEmployeeQueryForm);

    /**
     * 根据id查询角色下的人员
     */
    List<EmployeeVO> selectEmployeeByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据员工信息删除
     */
    void deleteByEmployeeId(@Param("employeeId") Long employeeId);

    /**
     * 删除某个角色的所有关系
     */
    void deleteByRoleId(@Param("roleId") Long roleId);

    /**
     * 根据员工和角色删除关系
     */
    void deleteByEmployeeIdRoleId(@Param("employeeId") Long employeeId, @Param("roleId") Long roleId);

    /**
     * 批量删除某个角色下的某批用户的关联关系
     */
    void batchDeleteEmployeeRole(@Param("roleId") Long roleId, @Param("employeeIds") Set<Long> employeeIds);

    /**
     * 判断某个角色下是否存在用户
     */
    Integer existsByRoleId(@Param("roleId") Long roleId);
}
